package com.skyd.core.android.game;


import com.skyd.core.vector.Vector2DF;

/**
 * 表示精灵的一种状态所显示的内容
 * 
 * @author SkyD
 * 
 */
public class GameSpiritState extends GameNodeObject implements IGameImageHolder {
	
	public GameSpiritState(){
		
	}
	
	public GameSpiritState(GameAnimation ... animations){
		for(GameAnimation a:animations){
			try {
				a.setParent(this);
			} catch (GameException e) {
				e.printStackTrace();
			}
			getAnimationList().add(a);
		}
	}

	/**
	 * 初始值为null。 功能注释：状态名称，用于标识
	 */
	private String _Name = null;

	/**
	 * 获取Name。 功能注释：状态名称，用于标识
	 * 
	 * @return 当前的String类型的值
	 */
	public String getName() {
		return _Name;
	}

	/**
	 * 设置Name。 功能注释：状态名称，用于标识
	 * 
	 * @param value
	 *            要设置的String类型值
	 */
	public void setName(String value) {
		_Name = value;
	}

	/**
	 * 设置Name为其默认值(null)。 功能注释：状态名称，用于标识
	 */
	public void setNameToDefault() {
		setName(null);
	}

	/**
	 * 初始值为new Vector2DF(0,0)。 功能注释：显示坐标位置偏移量
	 */
	private Vector2DF _PositionOffset = new Vector2DF(0, 0);

	/**
	 * 获取PositionOffset。 功能注释：显示坐标位置偏移量
	 * 
	 * @return 当前的Vector2DF类型的值
	 */
	public Vector2DF getPositionOffset() {
		return _PositionOffset;
	}

	/**
	 * 设置PositionOffset。 功能注释：显示坐标位置偏移量
	 * 
	 * @param value
	 *            要设置的Vector2DF类型值
	 */
	public void setPositionOffset(Vector2DF value) {
		_PositionOffset = value;
	}

	/**
	 * 设置PositionOffset为其默认值(new Vector2DF(0,0))。 功能注释：显示坐标位置偏移量
	 */
	public void setPositionOffsetToDefault() {
		setPositionOffset(new Vector2DF(0, 0));
	}

	/**
	 * 初始值为new GameObjectList<GameAnimation>(this)。 功能注释：动画列表，用于存放此状态所显示的相关动画
	 */
	private GameObjectList<GameAnimation> _AnimationList = new GameObjectList<GameAnimation>(this);

	/**
	 * 获取AnimationList。 功能注释：动画列表，用于存放此状态所显示的相关动画
	 * 
	 * @return 当前的GameObjectList<GameAnimation>类型的值
	 */
	public GameObjectList<GameAnimation> getAnimationList() {
		return _AnimationList;
	}

	/**
	 * 设置AnimationList。 功能注释：动画列表，用于存放此状态所显示的相关动画
	 * 
	 * @param value
	 *            要设置的GameObjectList<GameAnimation>类型值
	 */
	public void setAnimationList(GameObjectList<GameAnimation> value) {
		_AnimationList = value;
	}

	/**
	 * 设置AnimationList为其默认值(new GameObjectList<GameAnimation>(this))。
	 * 功能注释：动画列表，用于存放此状态所显示的相关动画
	 */
	public void setAnimationListToDefault() {
		setAnimationList(new GameObjectList<GameAnimation>(this));
	}

	/**
	 * 初始值为0。 功能注释：当前显示的动画索引位置
	 */
	private int _DisplayAnimationIndex = 0;

	/**
	 * 获取DisplayAnimationIndex。 功能注释：当前显示的动画索引位置
	 * 
	 * @return 当前的int类型的值
	 */
	public int getDisplayAnimationIndex() {
		return _DisplayAnimationIndex;
	}

	/**
	 * 设置DisplayAnimationIndex。 功能注释：当前显示的动画索引位置
	 * 
	 * @param value
	 *            要设置的int类型值
	 */
	public void setDisplayAnimationIndex(int value) {
		_DisplayAnimationIndex = value;
	}

	/**
	 * 设置DisplayAnimationIndex为其默认值(0)。 功能注释：当前显示的动画索引位置
	 */
	public void setDisplayAnimationIndexToDefault() {
		setDisplayAnimationIndex(0);
	}

	/**
	 * 转到下一个动画
	 */
	public void toNextAnimation() {
		if (++_DisplayAnimationIndex >= _AnimationList.size())
			_DisplayAnimationIndex = 0;
	}

	/**
	 * 转到上一个动画
	 */
	public void toPrevAnimation() {
		if (--_DisplayAnimationIndex < 0)
			_DisplayAnimationIndex = _AnimationList.size() - 1;
	}

	/**
	 * 转到随机一个动画
	 */
	public void toRandomAnimation() {
		_DisplayAnimationIndex = GameMaster.getRandom().nextInt(
				_AnimationList.size());
	}

	/**
	 * 获得当前显示的动画，子类可以通过重写此方法以实现改变动画行为等功能
	 * 
	 * @return 当前显示的动画
	 */
	public GameAnimation getDisplayAnimation() {
		return _AnimationList.get(_DisplayAnimationIndex);
	}

	/**
	 * 获取当前显示的图像，子类可以通过重写此方法以实现增加特效等功能
	 * 
	 * @return 当前显示的图像
	 */
	public GameImage getDisplayImage() {
		return getDisplayAnimation().getDisplayImage();
	}

	@Override
	public GameObject getDisplayContentChild() {
		return getDisplayAnimation();
	}

	/**
	 * 更新状态
	 */
	@Override
	public void updateChilds() {
		if (_AnimationList.size() > 0)
			getDisplayAnimation().update();
	}
}
